#include <stdio.h>  // 标准输入输出
#include <unistd.h> // POSIX标准接口
#include <string.h> // 字符串处理(操作字符数组)

#include "ohos_init.h"      // 用于初始化服务(services)和功能(features)
#include "cmsis_os2.h"      // CMSIS-RTOS API V2
#include "wifi_connecter.h" // easy wifi (station模式)

#include "net_config.h" //网络相关配置信息

char cs[1024] ={0};
// 主线程函数
static void NetDemoTask(void *arg)
{
    (void)arg;

    int netId = 0;

    do
    {
        // 定义热点配置
        WifiDeviceConfig config = {0};

        // 设置热点配置中的SSID
        strcpy(config.ssid, PARAM_HOTSPOT_SSID);

        // 设置热点配置中的密码
        strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);

        // 设置热点配置中的加密方式(Wi-Fi security types)
        config.securityType = PARAM_HOTSPOT_TYPE;

        // 等待100ms
        osDelay(10);

        // 连接到热点
        netId = ConnectToHotspot(&config);

        // 检查是否成功连接到热点
        if (netId < 0)
        {
            // 连接到热点失败
            printf("ConnectToAP failed\n"); // 输出错误信息
            usleep(1 * 1000 * 1000);
        }
        // 如果连接AP失败重新连接AP
    } while (netId < 0);

    inotUdpClient(PARAM_SERVER_ADDR, PARAM_SERVER_PORT);
    InitGPS();

    while (1)
    // for (size_t i = 0; i < 10; i++)
    {
        // 运行UDP客户端测试
        // UdpClientTest(PARAM_SERVER_ADDR, PARAM_SERVER_PORT, "anran");

        // printf("hello\n");
        readGPS(cs,255);
        // 如果字符串长度 > 0 那么就发送数据给UDP
        if(cs[0]!='\0')
            SendUdpInfo(cs);
        // usleep(1 * 1000 * 1000);
    }
    closeUdpClient();
    // 断开热点连接
    printf("disconnect to AP ...\r\n");
    DisconnectWithHotspot(netId);
    printf("disconnect to AP done!\r\n");
}

// 入口函数
static void NetDemoEntry(void)
{

    // 定义线程属性
    osThreadAttr_t attr;
    attr.name = "NetDemoTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 10240;
    attr.priority = osPriorityNormal;

    // 创建线程
    if (osThreadNew(NetDemoTask, NULL, &attr) == NULL)
    {
        printf("[NetDemoEntry] Falied to create NetDemoTask!\n");
    }
}

// 运行入口函数
SYS_RUN(NetDemoEntry);
